package com.agile.leetcode.middle.numRabbits;

import java.util.HashMap;
import java.util.Map;

/**
 * 森林中，每个兔子都有颜色。其中一些兔子（可能是全部）告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。
 *
 * 返回森林中兔子的最少数量。
 *
 * 示例:
 * 输入: answers = [1, 1, 2]
 * 输出: 5
 * 解释:
 * 两只回答了 "1" 的兔子可能有相同的颜色，设为红色。
 * 之后回答了 "2" 的兔子不会是红色，否则他们的回答会相互矛盾。
 * 设回答了 "2" 的兔子为蓝色。
 * 此外，森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
 * 因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。
 *
 * 输入: answers = [10, 10, 10]
 * 输出: 11
 *
 * 输入: answers = []
 * 输出: 0
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/rabbits-in-forest
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @Author:ChenZhangKun
 * @Date: 2021/3/22 21:51
 */
public class NumRabbits {
    public static void main(String[] args) {
        NumRabbits numRabbits = new NumRabbits();
        int[] arr = {1, 1, 2};
        System.out.println(numRabbits.numRabbits(arr));
    }

    public int numRabbits(int[] answers) {
        Map<Integer, Integer> map = new HashMap<>(16);
        // 定义数量
        int num = 0;
        // 循环
        for (int answer : answers) {
            if (map.containsKey(answer) && map.get(answer) > 0) {
                map.put(answer, map.get(answer) - 1);
            } else {
                num += answer + 1;
                map.put(answer, answer);
            }
        }
        return num;
    }
}
